package claseArreglosMultidimensionales;

public class MapaDeHumedad {

	private double[][] terreno;
	
	public MapaDeHumedad(int altura, int ancho){
		this.terreno = new double[altura][ancho];
	}
	
	public void setValorHumedad(int altura, int ancho, double valorHumedad){
		if(valorHumedad < 100){
			this.terreno[altura - 1 ][ancho - 1] = valorHumedad;
		}
	}
	
	public double getValorHumedad(int altura, int ancho){
		return this.terreno[altura - 1][ancho - 1];
	}

	public double CalcularHumedadPromeido() {
		double valorPromedio = 0;
		int cantidadCasilleros = 0;
		
		for(int altura= 0; altura < this.terreno.length; altura ++){
			for(int ancho = 0; ancho < this.terreno[altura].length; ancho++){
				valorPromedio = valorPromedio + this.terreno[altura][ancho];
				cantidadCasilleros++;
			}
		}
		valorPromedio = valorPromedio/cantidadCasilleros;
		
		return valorPromedio;
	}

	public double obtenerValorMinimoHumedad() {
		double valorMinimo = 100;
		
		for(int altura= 0; altura < this.terreno.length; altura ++){
			for(int ancho = 0; ancho < this.terreno[altura].length; ancho++){
				if(valorMinimo > this.terreno[altura][ancho]){
					valorMinimo = this.terreno[altura][ancho];
				}
			}
		}
		return valorMinimo;
	}

	public double obtenerValorMaximoHumedad() {
		double valorMaximo = 0;
		
		for(int altura= 0; altura < this.terreno.length; altura ++){
			for(int ancho = 0; ancho < this.terreno[altura].length; ancho++){
				if(valorMaximo < this.terreno[altura][ancho]){
					valorMaximo = this.terreno[altura][ancho];
				}
			}
		}
		
		return valorMaximo;
	}

	public double CalcularHumedadContornoTerreno() {
		double humedadContorno = 0;
		/*Sumo todos los valores en la primer fila del array
		 * altura = 0;
		 * */
		for(int ancho = 0; ancho < this.terreno[0].length; ancho++){
			humedadContorno = humedadContorno + this.terreno[0][ancho];
		}
		
		/*Sumo todos los valores en la ultima fila del array
		 * altura = longitud total del terreno.
		 * */
		for(int ancho = 0; ancho < this.terreno[this.terreno.length -1].length; ancho++){
			humedadContorno = humedadContorno + this.terreno[this.terreno.length -1][ancho];
		}
		
		/*Sumo todos los valores en la primer columna del array
		 * sin contar la primer y ultima posicion ya que 
		 * se sumaron anteriormente.
		 * */
		for(int altura = 1; altura < this.terreno[0].length - 1; altura++){
			humedadContorno = humedadContorno + this.terreno[altura][0];
		}
		/*Sumo todos los valores en la ultima columna del array
		 * sin contar la primer y ultima posicion ya que 
		 * se sumaron anteriormente.
		 * */
		for(int altura = 1; altura < this.terreno[this.terreno[0].length -1].length -1 ; altura++){
			humedadContorno = humedadContorno + this.terreno[altura][this.terreno[0].length - 1];
		}
		
		return humedadContorno
		;
	}

	/*
	 * Devuelve las cantidad de parcelas que contienen un valor de humedad dentro del
	 * rango especificado
	 * 
	 * */
	public int calcularCantidadMuestras(int valorMinimo, int valorMaximo) {
		int cantidadMuestras = 0;
		
		for(int altura = 0; altura < this.terreno.length ; altura++){
			for(int ancho = 0; ancho < this.terreno[altura].length ; ancho++){
				if((this.terreno[altura][ancho] >= valorMinimo) && (valorMaximo >= this.terreno[altura][ancho])){
					cantidadMuestras = cantidadMuestras + 1;
				}
			}
		}
		return cantidadMuestras;
	}
	
	
}
